02.Docker 命令
Docker 命令图

Docker 常用命令
帮助命令
docker version # docker 版本信息
docker info # 显示 docker 系统信息
docker --help # 帮助命令
docker stats # 查看 docker 资源占用情况命令
docker system df # 查看镜像、容器、数据卷所占用的空间
Docker 进程相关命令
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker #查看Docker服务状态
systemctl enable docker #设置开机自启
# 需要Root权限,前面加sudo
images 镜像相关命令
镜像名
- 镜像名称一般分两部分组成:
[repository]:[tag] - 在没有指定
tag时,默认是latest,代表最新版本的镜像

查看本机中所有镜像 docker images
docker images # 列出本地所有镜像
-a # 列出所有镜像(包含中间映像层)
-q # 只显示镜像id

REPOSITORY# 镜像的仓库TAG# 镜像的标签IMAGE ID# 镜像的 IDCREATED# 镜像的创建时间SIZE# 镜像的大小
搜索镜像 docker search
docker search [options] 镜像名 # 去dockerhub上查询当前镜像
--filter stars=20 # 列出收藏数不少于20的镜像
--no-trunc # 显示完整的镜像信息


从仓库下载镜像 docker pull
docker pull 镜像名[:TAG|@DIGEST]
# 示例
docker pull nginx
加载镜像
docker load -i nginx.tar
导出镜像 docker save
docker save -o
# 示例
docker save -o nginx.tar nginx:latest

删除镜像 docker rmi
docker rmi 镜像名 # 删除镜像
-f # 强制删除
# 如:删除最新的nginx镜像
docker rmi nginx:latest
docker rmi `docker images -q` # 删除所有本地镜像
实操
操作 redis 镜像

- 去 DockerHub 搜索 Redis 镜像/ 查看 Redis 镜像名称和版本: https://hub.docker.com/redis

- 拉取 redis 镜像
docker pull redis

- 查看 redis 镜像

- 打包最新的 redis 镜像为
redis.tar
sudo docker save -o redis.tar redis:latest

- 删除镜像
docker rmi redis:latest
docker iamges

- 加载镜像
docker load -i redis.tar

contrainer 容器相关命令

- docker ps # 查看所有正在运行的容器和状态
- docker ps –a # 查看所有容器
- docker run 参数
- docker exec 参数 # 进入容器
- docker stop 容器名称
- docker start 容器名称镜像名 /bin/bash
- docker rm 容器名称 运行状态删除失败
- docker inspect 容器名称 # 查看容器信息
- docker logs 查看容器运行日志
# 1.运行容器
docker run 镜像名 # 镜像名新建并启动容器
--name # 别名为容器起一个名字
-d # 启动守护式容器(在后台启动容器)
-p # 映射端口号:原始端口号 指定端口号启动
# 例:docker run -it --name myTomcat -p 8888:8080 tomcat
# docker run -d --name myTomcat -P tomcat
# 2.查看运行的容器
docker ps # 列出所有正在运行的容器
-a # 正在运行的和历史运行过的容器
-q # 静默模式,只显示容器编号
# 3.停止|关闭|重启容器
docker start 容器名字或者容器id # 开启容器
docker restart 容器名或者容器id # 重启容器
docker stop 容器名或者容器id # 正常停止容器运行
docker kill 容器名或者容器id # 立即停止容器运行
# 4.删除容器
docker rm -f 容器id和容器名
docker rm -f $(docker ps -aq) # 删除所有容器
# 5.查看容器内进程
docker top 容器id或者容器名 # 查看容器内的进程
# 6.查看查看容器内部细节
docker inspect 容器id # 查看容器内部细节
# 7.查看容器的运行日志
docker logs [OPTIONS] 容器id或容器名 # 查看容器日志
-t 加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
# 8.进入容器内部
docker exec [options] 容器id 容器内命令 # 进入容器执行命令
-i 以交互模式运行容器,通常与-t一起使用
-t 分配一个伪终端 shell窗口 bash
# 9.容器和宿主机之间复制文件
docker cp 文件|目录 容器id:容器路径 # 将宿主机复制到容器内部
docker cp 容器id:容器内资源路径 宿主机目录路径 # 将容器内资源拷贝到主机上
# 10.数据卷(volum)实现与宿主机共享目录
docker run -v 宿主机的路径|任意别名:/容~器内的路径 镜像名
#注意:
#1.如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
#2.如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中
# 11.打包镜像
docker save 镜像名 -o 名称.tar
# 12.载入镜像
docker load -i 名称.tar
# 13.容器打包成新的镜像
docker commit -m "描述信息" -a "作者信息" #(容器id或者名称)打包的镜像名称:标签
docker run
作用:
创建并启动容器
run 参数说明:
-i: 保持容器运行。通常与-t同时使用。加入 it 这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。-t: 为容器重新分配一个伪输入终端,通常与-i同时使用。-d: 以守护 (后台) 模式运行容器。创建一个容器在后台运行,需要使用 docker exec 进入容器。退出后,容器不会关闭。-it: 创建的容器一般称为交互式容器,-id: 创建的容器一般称为守护式容器--name: 为创建的容器命名。
示例:
docker run -it --name=c1 centos:7 /bin/bash # 创建交互式容器
docker run -id --name=c2 centos:7 # 创建守护式容器
# 注意:交互式容器,exit后容器自动关闭,守护式容器会在后台执行
docker exec 进入容器
docker exec -it c2 /bin/bash #进入容器
停止、启动、删除、查看容器
# 停止容器
docker stop 容器名称
# 启动容器
docker start 容器名称
# 删除容器 如果容器是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名称
docker -f rm 容器名称(强制删除)
# 查看容器信息
docker inspect 容器名称
Docker 数据卷
数据卷概述
数据卷概念和作用

数据卷 (Volume) 是一个虚拟目录,指向宿主机文件系统中的某个目录。

数据卷作用: 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。
数据卷命令
数据卷基本命令
docker volume 命令是数据卷操作,根据命令后跟随的 command 来确定下一步的操作:
create创建一个 volumeinspect显示一个或多个 volume 的信息ls列出所有的 volumeprune删除未使用的 volumerm删除一个或多个指定的 volume--hlep查看帮助文档
示例:
创建数据卷 html:
sudo docker volume create html

查看所有数据卷:
sudo docker volume ls

查看指定数据卷详细信息 html
sudo docker volume inspect html

删除未使用的数据卷:
docker volume prune
删除指定的数据卷:
docker volume rm html
数据卷挂载到容器中
在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
注意:
- 容器目录必须是绝对路径
- 如果目录不存在,会自动创建
- 可以挂载多个数据卷
示例1:
docker run \ # 创建并运行容器
--name mn \ # 给容器起名叫mn
-v html:/root/html \ # 把html数据卷挂载到容器内的/root/html这个目录
-p 8080:80 \ # 将宿主机8080端口映射到容器内的80端口
nginx # 镜像名称
示例2: 创建 c1 挂载 /root/data -->到 /root/data_container
docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash
# 关闭容器,可以看到数据卷数据文件还在
docker stop c1 # 宿主机目录还在
# 删除容器c1,宿主机目录还在
docker rm c1
# 重新恢复c1
docker run -it --name=c1 -v ~/data:/root/data_container centos:7 /bin/bash
# 注意在容器中不能写~
# 两个容器挂载同一个数据卷
docker run -it --name=c3 -v /root/data:/root/data_container centos:7 /bin/bash
docker run -it --name=c4 -v /root/data:/root/data_container centos:7 /bin/bash
# 在一个容器中修改文件,看到另一个容器也跟着
多容器挂载同一个数据卷
多容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互

示例:
# 创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
## 这里没有指定宿主机目录,默认生成一个宿主机目录
docker inspect c3 #查看c3
# 创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
## 使用 c3数据卷容器创建c1,c2,这时即使c3关闭不影响c3,c4交互
数据卷挂载和目录挂载

docker run 的命令中通过 -v 参数挂载文件或目录到容器中:
- -v
volume名称:容器内目录 - -v
宿主机文件:容器内文件 - -v
宿主机目录:容器内目录
数据卷挂载与目录挂载区别:
- 数据卷挂载耦合度低,由 docker 来管理目录,但是目录较深,不好找
- 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看
数据卷示例
创建并运行一个 MySQL 容器,将宿主机目录直接挂载到容器
目录挂载与数据卷挂载的语法是类似的:
-v[宿主机目录]:[容器内目录]-v[宿主机文件]:[容器内文件]
# 创建目录
mkdir -p /tmp/mysql/conf
mkdir -p /tmp/mysql/data
# 挂载命令
docker run \
--name mysql \
-e root=123456 \
-p 3306:3306 \
-v /tmp/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25
示例
创建 nginx 容器
创建运行一个 nginx 容器
docker run --name my_nginx3 -p 8011:80 -d nginx
- docker run 创建并运行一个容器;如果镜像不存在,会先拉取镜像
--name给容器起一个名字-p 主机端口:容器端口将宿主主机端口与容器端口映射,左侧是宿主主机端口,右侧是容器端口-d后台运行容器- nginx 镜像名称
容器创建产生唯一 ID:

查看容器状态:docker ps


查看容器日志:docker logs my_nginx3

持续日志输出:docker logs -f my_nginx3
进入 nginx 容器,修改 HTML 文本内容
- 进入容器
docker exec -it my_nginx3 bash
- 查看
html文件位置
cd /usr/share/nginx/html

- 修改
index.html内容
vim index.html
# vim 命令不存在,这是由于docker 镜像只保留必要的命令
- 关闭容器:
docker stop my_nginx3
-a查看关闭的容器:
docker ps -a
- 重新启动容器:
docker start my_nginx3
- 删掉容器:不能直接关掉运行中的容器:
docker rm my_nginx3
-f强制关闭容器:
docker rm -f my_nginx3
创建一个 nginx 容器,映射数据卷,修改容器内的 html 目录的 index.html
# nginx的html目录在容器内的/usr/share/nginx/html,需要把这个目录挂载到html这个数据卷上,方便操作其中的内容,创建运行容器时使用-v参数挂载数据卷
## 创建容器并挂载数据卷到容器内的html目录 如果没有数据卷会自动创建数据卷:
docker run --name mn -v html:/usr/share/nginx/html -p 8123:80 -d nginx
## 进入html数据卷所在位置,修改html内容
### 查看html数据卷在宿主机的位置
docker volume inspect html
### 进入该目录
cd /var/lib/docker/volumes/html/_data
### 修改文件
vim index.html
redis
创建并运行一个 redis 容器,并且支持数据持久化
docker run --name my_redis -p 6379:6379 -d redis redis-server --appendonly yes

进入容器:
docker exec -it my_redis bash
redis-cli

一步到位:
docker exec -it my_redis redis-cli